﻿Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Data
Imports System.Collections
Imports System.Windows.Forms
Imports DataObject
Imports System.Data.SqlClient

Public Class SqlServerDoiTuong

    Private oqLBase As New hDBase
    Private oDataSet As New DataSet
    Private oDatatable As New DataTable

    Public Function GetAllDoiTuong(ByVal sConnString As String) As DataTable
        oqLBase.Connection(sConnString)
        oDataSet = oqLBase.GetData("Get_All_DoiTuongs", "DoiTuong")
        Return oDataSet.Tables("DoiTuong")
    End Function

    Public Function InsertDoiTuong(ByVal sConnString As String, ByVal oDoiTuong As DoiTuong) As Boolean
        Dim SqlParam As SqlParameter() = {New SqlParameter("@SoDoiTuong", SqlDbType.Int), _
                                           New SqlParameter("@MaDoiTuong", SqlDbType.VarChar, 50), _
                                           New SqlParameter("@TenDoiTuong", SqlDbType.NVarChar, 50), _
                                           New SqlParameter("@SoLoaiDoiTuong", SqlDbType.Int), _
                                           New SqlParameter("@DiaChi", SqlDbType.NVarChar, 100), _
                                           New SqlParameter("@MaSoThue", SqlDbType.VarChar, 20), _
                                           New SqlParameter("@Email", SqlDbType.VarChar, 100), _
                                           New SqlParameter("@DienThoai", SqlDbType.VarChar, 15), _
                                           New SqlParameter("@Fax", SqlDbType.VarChar, 15), _
                                           New SqlParameter("@Website", SqlDbType.VarChar, 50), _
                                           New SqlParameter("@TKNganHang", SqlDbType.VarChar, 20), _
                                           New SqlParameter("@DiaChiNganHang", SqlDbType.NVarChar, 100), _
                                           New SqlParameter("@DienGiai", SqlDbType.NVarChar, 255), _
                                           New SqlParameter("@SoNoToiDa", SqlDbType.Money)}
        SqlParam(0).Direction = ParameterDirection.Output
        'Gán dữ liệu cho các tham số
        SqlParam(1).Value = oDoiTuong.MaDoiTuong
        SqlParam(2).Value = oDoiTuong.TenDoiTuong
        SqlParam(3).Value = oDoiTuong.SoLoaiDoiTuong
        SqlParam(4).Value = oDoiTuong.DiaChi
        SqlParam(5).Value = oDoiTuong.MaSoThue
        SqlParam(6).Value = oDoiTuong.Email
        SqlParam(7).Value = oDoiTuong.DienThoai
        SqlParam(8).Value = oDoiTuong.Fax
        SqlParam(9).Value = oDoiTuong.Website
        SqlParam(10).Value = oDoiTuong.TKNganHang
        SqlParam(11).Value = oDoiTuong.DiaChiNganHang
        SqlParam(12).Value = oDoiTuong.DienGiai
        SqlParam(13).Value = oDoiTuong.SoNoToiDa
        Try
            oqLBase.Connection(sConnString)
            oqLBase.RunStoreProcedures("Insert_DoiTuong", "DoiTuong", SqlParam)
            Return True
        Catch ex As Exception
            MessageBox.Show(ex.ToString, "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End Try
    End Function

    Public Function UpdateDoiTuong(ByVal sConnString As String, ByVal oDoiTuong As DoiTuong) As Boolean
        Dim SqlParam As SqlParameter() = {New SqlParameter("@SoDoiTuong", SqlDbType.Int), _
                                           New SqlParameter("@MaDoiTuong", SqlDbType.VarChar, 50), _
                                           New SqlParameter("@TenDoiTuong", SqlDbType.NVarChar, 50), _
                                           New SqlParameter("@SoLoaiDoiTuong", SqlDbType.Int), _
                                           New SqlParameter("@DiaChi", SqlDbType.NVarChar, 100), _
                                           New SqlParameter("@MaSoThue", SqlDbType.VarChar, 20), _
                                           New SqlParameter("@Email", SqlDbType.VarChar, 100), _
                                           New SqlParameter("@DienThoai", SqlDbType.VarChar, 15), _
                                           New SqlParameter("@Fax", SqlDbType.VarChar, 15), _
                                           New SqlParameter("@Website", SqlDbType.VarChar, 50), _
                                           New SqlParameter("@TKNganHang", SqlDbType.VarChar, 20), _
                                           New SqlParameter("@DiaChiNganHang", SqlDbType.NVarChar, 100), _
                                           New SqlParameter("@DienGiai", SqlDbType.NVarChar, 255), _
                                           New SqlParameter("@SoNoToiDa", SqlDbType.Money)}
        'Gán dữ liệu cho các tham số
        SqlParam(0).Value = oDoiTuong.SoDoiTuong
        SqlParam(1).Value = oDoiTuong.MaDoiTuong
        SqlParam(2).Value = oDoiTuong.TenDoiTuong
        SqlParam(3).Value = oDoiTuong.SoLoaiDoiTuong
        SqlParam(4).Value = oDoiTuong.DiaChi
        SqlParam(5).Value = oDoiTuong.MaSoThue
        SqlParam(6).Value = oDoiTuong.Email
        SqlParam(7).Value = oDoiTuong.DienThoai
        SqlParam(8).Value = oDoiTuong.Fax
        SqlParam(9).Value = oDoiTuong.Website
        SqlParam(10).Value = oDoiTuong.TKNganHang
        SqlParam(11).Value = oDoiTuong.DiaChiNganHang
        SqlParam(12).Value = oDoiTuong.DienGiai
        SqlParam(13).Value = oDoiTuong.SoNoToiDa
        Try
            oqLBase.Connection(sConnString)
            oqLBase.RunStoreProcedures("Update_DoiTuong", "DoiTuong", SqlParam)
            Return True
        Catch ex As Exception
            MessageBox.Show(ex.ToString, "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
        End Try
    End Function

    Public Function DeleteDoiTuong(ByVal sConnString As String, ByVal SoDoiTuong As Integer) As Boolean
        Dim SqlParam As SqlParameter() = {New SqlParameter("@SoDoiTuong", SqlDbType.Int)}
        SqlParam(0).Value = SoDoiTuong
        Try
            oqLBase.Connection(sConnString)
            oqLBase.RunStoreProcedures("Delete_DoiTuong", "DoiTuong", SqlParam)
            Return True
        Catch ex As SqlException
            Select Case ex.ErrorCode
                Case -2146232060
                    MessageBox.Show("Không thể xóa dữ liệu này. Khách hàng, nhà cung cấp này đang được sử dụng trong phần nghiệp vụ khác", "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Return False
            End Select
        End Try
    End Function

End Class
